import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 1. 模拟生成7天健身数据
dates = pd.date_range(start="2023-10-01", periods=7)
data = {
    "日期": dates,
    "热量摄入(kcal)": np.random.randint(1800, 2500, size=7),
    "运动消耗(kcal)": np.random.randint(300, 800, size=7),
    "蛋白质摄入(g)": np.random.randint(60, 120, size=7)
}
df = pd.DataFrame(data)

# 2. 计算每日热量缺口/盈余
df["热量差值"] = df["热量摄入(kcal)"] - df["运动消耗(kcal)"] - 1600  # 假设基础代谢1600kcal

# 3. 创建可视化图表
plt.figure(figsize=(12, 6))

# 3.1 柱状图：热量摄入与消耗对比
plt.subplot(2, 1, 1)
plt.bar(df["日期"], df["热量摄入(kcal)"], width=0.4, label='摄入', color='#66b3ff')
plt.bar(df["日期"] + pd.Timedelta(days=0.4), df["运动消耗(kcal)"], width=0.4,
        label='消耗', color='#ff9999')
plt.title('每日热量摄入 vs 运动消耗', fontsize=14)
plt.ylabel('千卡(kcal)')
plt.xticks(rotation=45)
plt.legend()

# 3.2 折线图：蛋白质摄入趋势
plt.subplot(2, 1, 2)
plt.plot(df["日期"], df["蛋白质摄入(g)"], marker='o', linestyle='--',
         color='#2ca02c', linewidth=2, label='蛋白质')
plt.axhline(y=90, color='red', linestyle=':', label='目标值(90g)')  # 蛋白质目标线
plt.fill_between(df["日期"], df["蛋白质摄入(g)"], 90,
                 where=(df["蛋白质摄入(g)"] >= 90),
                 color='#d4f4d4', alpha=0.5)  # 达标区域填充
plt.title('蛋白质摄入趋势分析', fontsize=14)
plt.ylabel('克(g)')
plt.xticks(rotation=45)
plt.legend()

plt.tight_layout()
plt.show()
